﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Procure.Payment
{
    public abstract class BaseGateway<GatewaySettings> where GatewaySettings : IGatewaySettings
    {
        public abstract Guid Id { get; }
        public abstract string Name { get; }

        public abstract bool CanAuthorize { get; }
        public abstract bool CanSettle { get; }
        public abstract bool CanCharge { get; }
        public abstract bool CanRefund { get; }
        public abstract bool CanVoid { get; }

        public abstract GatewaySettings Settings { get; set; }

        public abstract TransactionResult Authorize(TransactionData data);
        public abstract TransactionResult Settle(TransactionData data);
        public abstract TransactionResult Charge(TransactionData data);
        public abstract TransactionResult Refund(TransactionData data);
        public abstract TransactionResult Void(TransactionData data);

        public BaseGateway(Dictionary<string, string> GatewaySettings)
        {
        }
    }
}
